/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package contable.dominio;

/**
 *
 * @author jaime
 */
public class Planilla {

    private Empleado empleado;
    private Periodo periodo;
    private double horasLab;
    private double horasExtra;
    private double horasNoct;
    private int incapacidad;

    public Empleado getEmpleado() {
        return empleado;
    }

    public void setEmpleado(Empleado empleado) {
        if (empleado == null) {
            throw new IllegalArgumentException("El empleado no puede ser vacio");
        } else {
            this.empleado = empleado;
        }
    }

    public Periodo getPeriodo() {
        return periodo;
    }

    public void setPeriodo(Periodo periodo) {
        if (periodo == null) {
            throw new IllegalArgumentException("El periodo no puede ser vacio");
        } else {
            this.periodo = periodo;
        }
    }

    public double getHorasLab() {
        return horasLab;
    }

    public void setHorasLab(double horasLab) {
        if (horasLab < 0) {
            throw new IllegalArgumentException("Las horas laboradas no pueden ser negativas");
        } else {
            this.horasLab = horasLab;
        }
    }

    public double getHorasExtra() {
        return horasExtra;
    }

    public void setHorasExtra(double horasExtra) {
        if (horasExtra < 0) {
            throw new IllegalArgumentException("Las horas extra no pueden ser negativas");
        } else {
            this.horasExtra = horasExtra;
        }
    }

    public double getHorasNoct() {
        return horasNoct;
    }

    public void setHorasNoct(double horasNoct) {
        if (horasNoct < 0) {
            throw new IllegalArgumentException("Las horas nocturnas no pueden ser negativas");
        } else {
            this.horasNoct = horasNoct;
        }
    }

    public int getIncapacidad() {
        return incapacidad;
    }

    public void setIncapacidad(int incapacidad) {
        if (incapacidad < 0) {
            throw new IllegalArgumentException("Los días de incapacidad no pueden ser negativas");
        } else {
            this.incapacidad = incapacidad;
        }
    }

    public double calcularSalario() {
        double salarioBase = empleado.getSueldo() / 720;
        return (double) Math.round((salarioBase * horasLab + (salarioBase * horasExtra) * 1.25 + (salarioBase * horasNoct) * 1.5 + ((double) salarioBase * incapacidad) * 24) * 100) / 100;
    }

    @Override
    public String toString() {
        return "Planilla{" + "empleado=" + empleado + ", periodo=" + periodo + ", horasLab=" + horasLab + ", horasExtra=" + horasExtra + ", horasNoct=" + horasNoct + ", incapacidad=" + incapacidad + ", salario=" + calcularSalario() + '}';
    }

    @Override
    public Planilla clone() {
        Planilla tmp = new Planilla();
        tmp.setEmpleado(empleado);
        tmp.setPeriodo(periodo);
        tmp.setHorasLab(horasLab);
        tmp.setHorasExtra(horasExtra);
        tmp.setHorasNoct(horasNoct);
        tmp.setIncapacidad(incapacidad);
        return tmp;
    }
}
